'''
    Controller层
    主要负责接收客户端的请求
    响应数据
    提供API接口
'''
from fastapi import FastAPI, APIRouter
import crud1
from database1 import SessionLocal, Base, engine
from sqlalchemy.orm import Session
from fastapi import Depends
import schema1
import uvicorn

# 会创建所有继承Base 类的表格
Base.metadata.create_all(bind=engine)

app = FastAPI(title="员工管理API接口")

'''
    Session的连接的创建构建成一个依赖项
    是一个嵌套依赖：需要的是返回一个SessionLocal的对象，用我之后销毁
    
    return: 执行return语句后函数完全结束了
    yield: 返回值在调用者调用后还会继续执行
'''
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()


# @app.get("/emps/")
# async def get_emps(db: Session = Depends(get_db)):
#     return crud.get_all_emp(db)
#
# @app.post("/emp/add/")
# async def add_emp(emp: schema.EmpSchema, db: Session = Depends(get_db)):
#     emp1 = crud.get_emp_by_empno(db=db, empno=emp.empno)
#     if emp1:
#         return {"message": "员工编号已经存在"}
#     return crud.add_emp(db, emp)
#
# @app.post("/emp/update/")
# async def update_emp(emp: schema.EmpSchema, db: Session = Depends(get_db)):
#     emp1 = crud.get_emp_by_empno(db=db, empno=emp.empno)
#     if not emp1:
#         return {"message": "要修改的员工不存在"}
#     return crud.update_emp(db=db, emp_schema=emp)
#
# @app.get("/emp/delete/")
# async def update_emp(empno: int, db: Session = Depends(get_db)):
#     emp1 = crud.get_emp_by_empno(db=db, empno=empno)
#     if not emp1:
#         return {"message": "要删除的员工不存在"}
#     return crud.del_emp(db=db, empno=empno)

@app.get("/emps/")
async def get_emps(db: Session = Depends(get_db)):
    return crud1.get_all_emp(db)
@app.get("/emps_id/")
async def get_id_emp(empno:int,db: Session = Depends(get_db)):
    get_emp = crud1.get_emp_by_empno(db,empno=empno)
    if get_emp:
        return crud1.get_emp_by_empno(db,empno=empno)
    return {"message": "员工编号不存在"}
@app.post("/emp/add/")
async def add_emp(emp: schema1.Emp_schema, db: Session = Depends(get_db)):
    emp1 = crud1.get_emp_by_empno(db=db, empno=emp.empno)
    if emp1:
        return {"message": "员工编号已经存在"}
    return crud1.add_emp(db, emp)
@app.post("/emp/update/")
async def update_emp(emp: schema1.Emp_schema, db: Session = Depends(get_db)):
    emp1 = crud1.get_emp_by_empno(db=db, empno=emp.empno)
    if not emp1:
        return {"message": "要修改的员工不存在"}
    return crud1.mod_emp(db=db, emp_schema=emp)

@app.get("/emp/delete/")
async def del_emp(empno: int, db: Session = Depends(get_db)):
    emp1 = crud1.get_emp_by_empno(db=db, empno=empno)
    if not emp1:
        return {"message": "要删除的员工不存在"}
    return crud1.delete_emp(db=db, empno=empno)


if __name__ == '__main__':
    uvicorn.run("stu_controller:app", host="localhost", port=8010, reload=True)